/*
 * HECHA, NO PROBADA.
 */

package poker.condiciones;

import java.util.Vector;
import prop.Condicion;
import prop.Carta;
import prop.Carta.Palos;
import poker.ManoPoker;
import poker.JugadorPoker;

/**
 * @author Reyes
 */

/*
 * descripción:
 * Retorna cierto si tiene que descartarse de al menos una carta.
 * Usaremos esta condicion para decidir que cartas va a descartar el jugador
 * máquina, en el caso que queramos descartar todas las cartas que no sean
 * comodines, ni estén repetidas.
 * nota: Son las cartas que quiero descartar en caso de que no tenga ni full,
 * ni color, ni escalera, ni repoker.
 * 5 parámetros [p0..p4](out), asigna "0" al parámetro p(i) en el caso de querer
 * conservar la carta que tiene el índice i en el vector de cartas que tiene
 * una mano, y asigna "1" en el caso de que la mencionada carta sea candidata
 * al descarte.
 */
public class CondicionCartasSobran extends Condicion{
    /*@Override
    public boolean evalua() {

        boolean meDescarto = false;
        ManoPoker m = ((JugadorPoker) estrategia.getJugador()).getMano();
        Vector<Carta> vector = m.getVector();

        if (vector.size()!=5) {
            //si ocurre esto, es que ha habido un error
            return false;
        } else {
            String cero = Integer.toString(0);
            String uno = Integer.toString(1);

            for (int i=0; i< m.getNumCartas(); i++){
                estrategia.setValor(parametros.get(i), cero);
            }
         //busco las cartas que no son comodines y que están repetidas,
            for (int j=0; j<5; j++){
                Carta carta = vector.get(j);
                if (noEsComodin(carta)){
                    int n1 = carta.getNum();
                    for (int k =j+1; k<5; k++){
                        int n2 = (vector.get(k)).getNum();
                        if (n1==n2) {
                        estrategia.setValor(parametros.get(j), uno);
                        estrategia.setValor(parametros.get(k), uno);
                        meDescarto = true;
                        }//fin if
                    }//fin for
                }// fin if
            }//fin for
        }//fin else
        return meDescarto;
    } // fin evalua()*/

    @Override
    public boolean evalua() { // Creo que hace lo mismo; no peta

        boolean meDescarto = false;
        ManoPoker m = ((JugadorPoker) estrategia.getJugador()).getMano();
        Vector<Carta> vector = m.getVector();
        ManoPoker.EvalData e = m.conteo();

        for (int i = 0; i < vector.size(); i++) {
            Carta c = vector.get(i);
            estrategia.setValor(parametros.get(i), "0");
            for (int j = 0; j < e.size; j++) {
                if (e.numc[j] == c.getNum()) {
                    if (e.numr[j] < 2) {
                        //System.err.println("entra");
                        if (e.numc[j] > 0 && i+1 != vector.size())
                            estrategia.setValor(parametros.get(i), "1");
                        meDescarto = true;
                    }
                }
                //System.err.println("numc: " + e.numc[j] + " carta: "+ c.getNum());
            }
        }
       
        return meDescarto;
    }

    public boolean noEsComodin(Carta c){
        return (c.getPalo()!=Palos.COMODIN);
    }
} // fin de la clase


